public class Test {                        // 1.第一步，准备加载类

    static int num = 4;                    // 2.第二步，静态变量和静态代码块的加载顺序由编写先后决定

    static {                               // 3.第三步，静态块，然后执行静态代码块，因为有输出，故打印a
        System.out.println("a");
    }

    public static void main(String[] args) {
        // 执行结果：a b c d
        new Test();                        // 4.第四步，new一个类，但在new之前要处理匿名代码块
    }

    int a = 4;                             // 5.第五步，按照顺序加载变量和执行匿名代码块

    {
        System.out.println("b");           // 6.第六步，按照顺序加载匿名代码块，代码块中有打印
    }

    int b = 5;                             // 7.第七步，按照顺序加载变量

    {
        System.out.println("c");           // 8.第八步，按照顺序打印c
    }

    Test() {
        System.out.println("d");           // 9.第久步，最后加载构造函数，完成对象的建立
    }

    static void run() {                    // 静态方法，调用的时候才加载// 注意看，e没有加载
        System.out.println("e");
    }
}